package main

import (
	"fmt"

)

// 定义一个全局变量
// 全局变量的定义只能用var
// 全局变量的特点 常驻内存 污染全局
// 局部变量 不常驻内存 不污染全局
// 闭包 是指有权访问另一个函数作用域中的变量的函数
// 创建闭包的常见的方式就是在一个函数内部创建另一个函数，通过另一个函数访问这个函数的局部变量

// 写法 ：闭包的写法 函数里面嵌套一个函数 最后返回里面的函数
func adder() func() int{
	var i=10
	return func() int {
		return i+1
	}
}
func adder2() func(y int) int{
	var i=10  //常驻内存，不污染全局
	return func(y int) int {
		i += y
		return i
	}
}


func main() {
	var fn =adder()  //表示执行方法
	fmt.Println(fn()) //11
	fmt.Println(fn())	//11
	fmt.Println(fn())	//11
	// var 
	var fn2= adder2()
	fmt.Println(fn2(10)) //20
	fmt.Println(fn2(10))	//30
	fmt.Println(fn2(10))	//11
}